<?php


namespace S;

require PHPLIB . '/Ext/Wechat/vendor/autoload.php';

use EasyWeChat\Foundation\Application as WeChatApp;
use S\Cache\Cache as SCache;
use S\WeChat\Util\AccountConfigurator as Account;
use S\WeChat\Util\Cache;

/**
 * 微信扩展的入口
 *
 * 微信模扩展使用开源系统EasyWeChat.其相关信息如下:
 *
 * HomePage : https://easywechat.org/zh-cn/docs/index.html
 * Document : https://easywechat.org/zh-cn/docs/
 * GitHub   : https://github.com/overtrue/wechat
 *
 * 使用示例:
 *
 * $account     = '公众号的微信账号';
 * $Application = \S\WeChat::app($account);
 *
 * 不嫌麻烦也可以先require (PHPLIB.'/Ext/Wechat/vendor/autoload.php'),然后再实
 * 例化\EasyWeChat\Foundation\Application.因为EasyWeChat依赖大量第三方插件,为了
 * 更方便的维护其自身及其依赖,所以用到了composer.
 *
 * @package S
 */
class WeChat
{
    /**
     * 所有EasyWeChat实例
     *
     * @var array [account => \EasyWeChat\Foundation\Application, ...]
     */
    protected static $apps = [];

    /**
     * 通过微信账号获取EasyWeChat的Application实例
     *
     * @param string $account 公众号的微信号:不传入默认取配置文件中的第一个
     *
     * @return \EasyWeChat\Foundation\Application
     */
    public static function app($account = '')
    {
        if (!$account) {
            $account = Account::getFirst('account');
        }
        if (!isset(static::$apps[$account])) {
            static::$apps[$account] = new WeChatApp(Account::getOptions($account));
        }
        return static::$apps[$account];
    }

    /**
     * 获取兼容EasyWeChat的缓存实例
     *
     * @param string $type 缓存类型:默认为\S\Cache\Cache::TYPE_DEFAULT
     * @param string $name 缓存配置名:默认为\S\Cache\Cache::NAME_DEFAULT
     *
     * @return \S\Wechat\Util\Cache
     */
    public static function cache($type = SCache::TYPE_DEFAULT, $name = SCache::NAME_DEFAULT)
    {
        return new Cache($type, $name);
    }

}